---@class GT.itemInit 物品物编创建初始化系统
---@field ikData table<ItemKey,itemInit_data>  物品初始化数据
GT.itemInit = class()

---@type table<ItemKey,itemInit_data>  初始化的物品数据
itemInit={}

---@class itemInit_data 物品创建初始化参数列表
---@field ik ItemKey 物品编号
---@field create ITEM_CREATE 物品出生回调
---@field lose REMOVE_ITEM 物品丢掉回调
---@field attr table<uKeyAttr,number> 物品属性
---@field kv kv_class[] 自定义键值

---@param data itemInit_data[]
function GT.itemInit:ctor(data)
    for k, v in pairs(data) do
        itemInit[v.ik] = v
    end
    
end

---@param ikData itemInit_data[]
---@return GT.itemInit
function GT.itemInit.obj(ikData)
    return new(GT.itemInit, ikData)
end


GT.event.ITEM_CREATE(function(i)
    local d = itemInit[i:get_ItemKey()]
    if d ~= nil then
        ---初始化属性
        if d.attr ~= nil then
            for k, v in pairs(d.attr) do
                i.binding[k] = v
            end
        end
        if d.create ~= nil then
            d.create(i)
        end

        ---设置自定义键值
        if d.kv ~= nil then
            for k, v in pairs(d.kv) do
                i:set(v.K, v.V, v.call)
            end
        end
    end
end)
GT.event.REMOVE_ITEM(function(u, i)
    local d = itemInit[i:get_ItemKey()]
    if d ~= nil then
        d.lose(u, i)
    end
end)